package compiler;

import java.util.Hashtable;

/*Diego Lima de Freitas RA: 317632
 *Yuri Souza Padua RA: 317420
 * 
 * Classe que guarda a lista de variáveis, procedimentos e funções declaradas na liguagem
 */
public class SymbolTable {

    private Hashtable globalTable, localTable;

    public SymbolTable() {
        globalTable = new Hashtable();
        localTable = new Hashtable();
    }

    public Object putInGlobal(String key, Object value) {
        return globalTable.put(key, value);
    }

    public Object putInLocal(String key, Object value) {
        return localTable.put(key, value);
    }

    public Object getInLocal(Object key) {
        return localTable.get(key);
    }

    public Object getInGlobal(Object key) {
        return globalTable.get(key);
    }

    public Object get(String key) {
        // retorna o objeto correspodente a key. 
        Object result;
        if ((result = localTable.get(key)) != null) {
            // encontra um identificador local
            return result;
        } else {
            // encontra um identificador global
            return globalTable.get(key);
        }
    }

    public void removeLocalIdent() {
        // remove todos os identificadores locais
        localTable.clear();
    }
}
